package cn.tedu.charging.order.rabbit;

import cn.tedu.charging.order.config.RabbitConfiguration;
import cn.tedu.charging.order.dao.repository.OrderRepository;
//import cn.tedu.charging.order.dao.mapper.OrderSuccessMapper;
import cn.tedu.charging.order.pojo.po.OrderMQPO;
//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;


@Slf4j
@Component
public class RabbitMQOrderDeadLetterConsumer {

    //@Autowired
    //private OrderSuccessMapper orderSuccessMapper;

    @Autowired
    private OrderRepository orderRepository;

    /**
     * 消费死信队列消息
     * 通过订单号 去成功订单表查询 订单的状态
     * 如果订单状态 是 充电中 说明 在规定的时间内还没充满 订单状态没有变成 充电完成 异常订单 需要把订单状态 改为 异常结束
     * 如果订单状态 是 充电完成 说明 在规定的时间内已经完成 订单状态是 充电完成 正常订单 无需
     * @param orderMQPO
     * // 通过RabbitMQ 里的死信队列实现延迟消息,处理充电订单里的超时订单
     */
    @RabbitListener(queues = RabbitConfiguration.DEAD_LETTER_QUEUE_NAME)
    public void consumeChargingQueue(OrderMQPO orderMQPO, Message message, Channel channel) throws IOException {
        log.debug("消息死信消息:msg:{}", orderMQPO);
        orderRepository.updateOrderStatusFromProcessToExceptionEnd(orderMQPO.getOrderNo());
        log.debug("消息死信消息:msg:{},修改订单状态,如果是充电中修改为异常结束," +
                "如果是充电完成,无需处理", orderMQPO);


//        ack
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        channel.basicAck(deliveryTag,true);

    }
}